#ifndef MDTABLE_H
#define MDTABLE_H
#include <dtype.h>
//元数据表

//MDTABLE_LIBRARY_REF 库引用
STRUCT_P(CHBC_MDT_LIBRARY_REF)
{
#   define MD_LIBRARY_TYPE_UNKNOWN 0X00 //未定义
#   define MD_LIBRARY_TYPE_CHL 0X01 //字节码模块
#   define MD_LIBRARY_TYPE_NATIVE 0X02 //本地库
#   define MD_LIBRARY_TYPE_NATIVE 0X03 //CH-VM模块库
	uint16 Type;//库类型
	uint8 Reserved;//保留
	uint8 ContExten;//名称是否包含扩展名
	uint32 Name;//库名称
};

//MDTABLE_TYPE_DEF 类型定义
STRUCT_P(CHBC_MDT_TYPE_DEF)
{
	uint32 Name;//名称
	uint16 Flags;//标志（访问权限、静态、接口、枚举）
	uint16 MemberCount;//成员数量
	uint32 Member;//成员引用表
	uint32 ParentClass;//父类
};

//MDTABLE_TYPE_REF 类型引用
STRUCT_P(HBC_MDT_TYPE_REF)
{
	uint32 Name;//名称
	uint16 Flags;//标志（静态、接口、枚举）
	uint16 MemberCount;//成员数量
	uint32 Member;//成员引用表
	uint32 Library;//所属引用库
};

//MDTABLE_METHOD 方法
STRUCT_P(HBC_MDT_METHOD)
{
	uint32 Name;//名称
	uint16 Flags;//标志（访问权限、重写、覆盖、虚拟、声明、属性自动生成方法）
	uint8 ParamCount;//参数数量
	uint8 ParamVar;//最后一个参数是否为可变参数
	uint32 Param;//参数
	uint32 Return;//返回值类型
	uint32 Offset;//方法代码偏移
};


#endif